// https://www.acwing.com/problem/content/799/

#include <iostream>
#include <vector>

using namespace std;


int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int m, n;
    cin>>m>>n;
    vector<int> arr1(m+1);
    vector<int> arr2(m+1);

    // 1. 赋值，并且计算一阶差分，注意索引是从 1 开始，索引为 0，默认为 0
    for (int i = 1; i <= m; i++) {
        cin>>arr1[i];
        arr2[i] = arr1[i] - arr1[i - 1];
    }

    // 2. 更新差分，不更新所有的结果
    int start, end, change;
    while (n-->0) {
        cin>>start>>end>>change;
        // 只更新开始的位置和结束的位置，节约时间
        arr2[start] += change;
        arr2[end + 1] -= change;
    }

    // 3. 根据更新后的差分，更新原来的数组，并输出结果
    for (int i = 1; i <= m; i++) {
        arr1[i] = arr2[i] + arr1[i - 1];
        cout<<arr1[i]<<" ";
    }
    return 0;
}
